home *** CD-ROM | disk | FTP | other *** search
/ Aminet 45 / Aminet 45 (2001)(GTI - Schatztruhe)[!][Oct 2001].iso / Aminet / dev / c / vbcc.lha / vbcc / targets / ppc-warpos / include / string.h < prev    next >
C/C++ Source or Header  |  2001-04-28  |  3KB  |  87 lines

  1. #pragma begin_header
  2. /* string.h - vbcc PowerOpen/WarpOS */
  3.  
  4. #ifndef __STRING_H
  5. #define __STRING_H 1
  6.  
  7. #ifndef __SIZE_T
  8. #define __SIZE_T 1
  9. typedef unsigned long size_t;
  10. #endif
  11.  
  12. #undef NULL
  13. #define NULL ((void *)0)
  14.  
  15. void *memcpy(void *s1,const void *s2,size_t n);
  16. void *memmove(void *,const void *,size_t);
  17. void *memset(void *,int,size_t);
  18. int memcmp(const void *,const void *,size_t);
  19. void *memchr(const void *,int,size_t);
  20. char *strcat(char *,const char *);
  21. char *strncat(char *,const char *,size_t);
  22. char *strchr(const char *,int);
  23. size_t strcspn(const char *,const char *);
  24. char *strpbrk(const char *,const char *);
  25. char *strrchr(const char *,int);
  26. size_t strspn(const char *,const char *);
  27. char *strstr(const char *,const char *);
  28. char *strtok(char *,const char *);
  29. char *strerror(int);
  30.  
  31. /* PowerPC inline functions */
  32. size_t strlen(__reg("r3") const char *) =
  33.                 "\tsubi\tr4,r3,1\n"
  34.                 "#barrier\n"
  35.                 "\tlbzu\t0,1(r4)\n"
  36.                 "\tcmpwi\tr0,0\n"
  37.                 "\tbne\t$-8\n"
  38.                 "\tsub\tr3,r4,r3";
  39. char *strcpy(__reg("r3") char *, __reg("r4") const char *) =
  40.                 "\tsubi\tr5,r3,1\n"
  41.                 "\tsubi\tr4,r4,1\n"
  42.                 "#barrier\n"
  43.                 "\tlbzu\t0,1(r4)\n"
  44.                 "\tstbu\t0,1(r5)\n"
  45.                 "\tcmpwi\tr0,0\n"
  46.                 "\tbne\t$-12";
  47. char *strncpy(__reg("r3") char *, __reg("r4") const char *,
  48.               __reg("r5") size_t) =
  49.                 "\tcmpwi\tr5,0\n"
  50.                 "\tbeq\t$+36\n"
  51.                 "\tmtctr\tr5\n"
  52.                 "\tsubi\tr5,r3,1\n"
  53.                 "#barrier\n"
  54.                 "\tlbz\tr0,0(r4)\n"
  55.                 "\tstbu\tr0,1(r5)\n"
  56.                 "\tcmpwi\tr0,0\n"
  57.                 "\tbeq\t$+8\n"
  58.                 "\taddi\tr4,r4,1\n"
  59.                 "\tbdnz\t$-20";
  60. int strcmp(__reg("r3") const char *, __reg("r4") const char *) =
  61.                 "\tsubi\tr5,r3,1\n"
  62.                 "\tsubi\tr4,r4,1\n"
  63.                 "#barrier\n"
  64.                 "\tlbzu\tr3,1(r5)\n"
  65.                 "\tlbzu\tr6,1(r4)\n"
  66.                 "\tsub.\tr3,r3,r6\n"
  67.                 "\tbne\t$+12\n"
  68.                 "\tcmpwi\tr6,0\n"
  69.                 "\tbne\t$-20";
  70. int strncmp(__reg("r3") const char *, __reg("r4") const char *,
  71.             __reg("r5") size_t) =
  72.                 "\tsubi\tr6,r3,1\n"
  73.                 "\tli\tr3,0\n"
  74.                 "\tcmpwi\tr5,0\n"
  75.                 "\tbeq\t$+36\n"
  76.                 "\tsubi\tr4,r4,1\n"
  77.                 "\tmtctr\tr5\n"
  78.                 "#barrier\n"
  79.                 "\tlbzu\tr3,1(r6)\n"
  80.                 "\tlbzu\tr5,1(r4)\n"
  81.                 "\tsub.\tr3,r3,r5\n"
  82.                 "\tbne\t$+12\n"
  83.                 "\tcmpwi\tr5,0\n"
  84.                 "\tbdnzf\t2,$-20";
  85. #endif
  86. #pragma end_header
  87.